package Class.Homemade.damo0523.demo1;
/**
 * Created with IntelliJ IDEA.
 * Description: 继承
 * User: 姚东名
 * Date: 2024-05-23
 * Time: 15:26
 */
public class Test {
    /*
    多态实现的条件：
    1.在继承体系下
    2.子类必须要对父类中方法进行重写 重写：返回值和形参都不能发生改变
    3.通过父类的引用调用重写的方法
     */
    public static void eat(Animal animal) {
        animal.eat();
    }
    public static Animal eat1(Animal animal) {
        animal.eat();
        return null;
    }
    public static void main(String[] args) {
        //实例化对象
        Dog dog = new Dog("旺财", 12);
        dog.eat();
        Cat cat = new Cat("咪咪",10);
        cat.eat();
        System.out.println("=============");
        //向上转型：狗是动物
        //直接传参
        //具体点就是去完成某个行为，当不同的对象去完成时会产生出不同 的状态。
        //总的来说：同一件事情，发生在不同对象身上，就会产生不同的结果。
        Animal animal1 = new Dog("旺财", 12);
        animal1.eat();
        //动态绑定：程序在编译的时候，确实调用的是 父类的eat()
        //当运行代码的时候，通过父类引用，调用了父类和子类重写的那个方法，结果实际调用了子类的方法，此时 把这个情况，就叫做动态绑定
        Animal animal2 = new Cat("咪咪",10);
        animal2.eat();
        System.out.println("=============");
        //向上转型：方法的传参
        eat(dog);
        eat(cat);
        //返回值

        //向下转型：但是不是所有动物都是狗


    }
}
